package org.dousb.douojbackendgateway.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;
import org.springframework.web.util.pattern.PathPatternParser;

import java.util.Arrays;
import java.util.Collections;

/**
 * Spring Cloud Gateway 跨域配置
 */
@Configuration
public class CorsConfig {

    /**
     * 配置跨域过滤器
     */
    @Bean
    public CorsWebFilter corsWebFilter() {
        // 1. 定义跨域配置规则
        CorsConfiguration corsConfig = new CorsConfiguration();
        // 允许的请求源（origin）：* 表示允许所有源（生产环境建议指定具体域名，如"http://localhost:8080"）
        corsConfig.setAllowedOriginPatterns(Arrays.asList("*"));
        // 允许的请求方法（GET、POST、PUT等）
        corsConfig.addAllowedMethod("*");
        // 允许的请求头（如Content-Type、Authorization等）
        corsConfig.addAllowedHeader("*");
        // 是否允许携带Cookie（跨域请求时）
        corsConfig.setAllowCredentials(true);
        // 预检请求（OPTIONS）的缓存时间（单位：秒），避免频繁预检
        corsConfig.setMaxAge(3600L);

        // 2. 配置跨域规则适用的路径（/** 表示所有路径）
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());
        source.registerCorsConfiguration("/**", corsConfig);

        // 3. 创建并返回跨域过滤器
        return new CorsWebFilter(source);
    }
}